package com.fand.platform.configuration.dao;

import java.util.List;
import java.util.Map;

import com.fand.dto.PaginationDto;
import com.fand.platform.configuration.dto.LanguageDto;
import com.fand.platform.configuration.dto.LanguageLoDto;

/**
 * 语言
 * 
 * @author yaoHT
 * 
 */
public interface LanguageDao {
	String BEAN_ID = "com.fand.platform.configuration.dao.LanguageDao";

	/**
	 * 插入:语言
	 * 
	 * @param insertLanguage
	 *            语言对象
	 * 
	 * @param insertProperties
	 *            插入属性名集合
	 * 
	 * @return 影响行数
	 */
	int insertLanguageBy1(LanguageDto insertLanguage, String... insertProperties);

	/**
	 * 插入:语言
	 * 
	 * @param insertLanguage
	 *            语言对象
	 * 
	 * @return 影响行数
	 */
	int insertLanguageBy1_1(LanguageDto insertLanguage);

	/**
	 * 插入:语言
	 * 
	 * @param insertLanguage
	 *            语言对象
	 * 
	 * @return 影响行数
	 */
	int insertLanguageBy2(LanguageDto insertLanguage);

	/**
	 * 删除:语言
	 * 
	 * @param deleteLanguage
	 *            语言对象
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 影响行数
	 */
	int deleteLanguageBy1(LanguageDto deleteLanguage, String... whereEqProperties);

	/**
	 * 删除:语言
	 * 
	 * @param deleteLanguage
	 *            语言对象
	 * 
	 * @return 影响行数
	 */
	int deleteLanguageBy1_1(LanguageDto deleteLanguage);

	/**
	 * 删除:语言
	 * 
	 * @param deleteLanguage
	 *            语言对象
	 * 
	 * @return 影响行数
	 */
	int deleteLanguageByIds(LanguageDto deleteLanguage);

	/**
	 * 更新:语言
	 * 
	 * @param updateLanguage
	 *            语言对象
	 * 
	 * @param updateProperties
	 *            更新的属性名集合
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 影响行数
	 */
	int updateLanguageBy1(LanguageDto updateLanguage, String[] updateProperties, String... whereEqProperties);

	/**
	 * 更新:语言
	 * 
	 * @param updateLanguage
	 *            语言对象
	 * @param updateProperties TODO
	 * @param whereLanguage TODO
	 * @return 影响行数
	 */
	int updateLanguageByLocaleIdEqCode(LanguageDto updateLanguage, String[] updateProperties, LanguageDto whereLanguage);

	/**
	 * 更新:语言
	 * 
	 * @param updateLanguage
	 *            语言对象
	 * 
	 * @return 影响行数
	 */
	int updateLanguageBy2(LanguageDto updateLanguage);

	/**
	 * 查询:语言
	 * 
	 * @param requiredType
	 *            返回类型
	 * 
	 * @param selectLanguage
	 *            语言对象
	 * 
	 * @param objectId
	 *            返回对象标识
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 返回对象
	 */
	<R> R selectLanguageBy1ForObject(Class<R> requiredType, LanguageDto selectLanguage, String objectId,
			String... whereEqProperties);

	/**
	 * 查询:语言
	 * 
	 * @param selectLanguage
	 *            语言对象
	 * 
	 * @return 返回对象
	 */
	Integer selectLanguageByLocaleIdEqCodeNqIdForInteger(LanguageDto selectLanguage);

	/**
	 * 查询:语言
	 * 
	 * @param requiredType
	 *            返回类型
	 * 
	 * @param selectLanguage
	 *            语言对象
	 * 
	 * @param objectId
	 *            返回对象标识
	 * 
	 * @return 返回对象
	 */
	<R> R selectLanguageBy2ForObject(Class<R> requiredType, LanguageDto selectLanguage, String objectId);

	/**
	 * 查询:语言
	 * 
	 * @param requiredType
	 *            返回类型
	 * 
	 * @param selectLanguage
	 *            语言对象
	 * 
	 * @param objectId
	 *            返回对象标识
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 语言对象集合
	 */
	<R> List<R> selectLanguageBy1ForObjectList(Class<R> requiredType, LanguageDto selectLanguage, String objectId,
			String... whereEqProperties);

	/**
	 * 查询:语言
	 * 
	 * @param requiredType
	 *            返回类型
	 * 
	 * @param selectLanguage
	 *            语言对象
	 * 
	 * @param objectId
	 *            返回对象标识
	 * 
	 * @return 语言对象集合
	 */
	<R> List<R> selectLanguageBy1_1ForObjectList(Class<R> requiredType, LanguageDto selectLanguage, String objectId);

	/**
	 * 查询:语言
	 * 
	 * @param requiredType
	 *            返回类型
	 * 
	 * @param selectLanguage
	 *            语言对象
	 * 
	 * @param objectId
	 *            返回对象标识
	 * 
	 * @return 语言对象集合
	 */
	<R> List<R> selectLanguageBy2ForObjectList(Class<R> requiredType, LanguageDto selectLanguage, String objectId);

	/**
	 * 查询:语言
	 * 
	 * @param mappedClass
	 *            返回类型
	 * 
	 * @param selectLanguage
	 *            语言对象
	 * 
	 * @param selectProperties
	 *            查询的属性名集合
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 返回对象
	 */
	<R> R selectLanguageBy1ForMappedObject(Class<R> mappedClass, LanguageDto selectLanguage,
			String[] selectProperties, String... whereEqProperties);

	/**
	 * 查询:语言
	 * 
	 * @param mappedClass
	 *            返回类型
	 * 
	 * @param selectLanguage
	 *            语言对象
	 * 
	 * @return 返回对象
	 */
	<R> R selectLanguageBy1_1ForMappedObject(Class<R> mappedClass, LanguageDto selectLanguage);

	/**
	 * 查询:语言
	 * 
	 * @param mappedClass
	 *            返回类型
	 * 
	 * @param selectLanguage
	 *            语言对象
	 * 
	 * @return 返回对象
	 */
	<R> R selectLanguageByIdForMappedObject(Class<R> mappedClass, LanguageDto selectLanguage);

	/**
	 * 查询:语言
	 * 
	 * @param mappedClass
	 *            返回类型
	 * 
	 * @param selectLanguage
	 *            语言对象
	 * 
	 * @param selectProperties
	 *            查询的属性名集合
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 语言对象集合
	 */
	<R> List<R> selectLanguageBy1ForMappedObjectList(Class<R> mappedClass, LanguageDto selectLanguage,
			String[] selectProperties, String... whereEqProperties);

	/**
	 * 查询:语言
	 * 
	 * @param mappedClass
	 *            返回类型
	 * 
	 * @param selectLanguage
	 *            语言对象
	 * 
	 * @return 语言对象集合
	 */
	<R> List<R> selectLanguageByCodeForMappedObjectList(Class<R> mappedClass, LanguageDto selectLanguage);

	/**
	 * 查询:语言
	 * 
	 * @param mappedClass
	 *            返回类型
	 * 
	 * @param selectLanguage
	 *            语言对象
	 * 
	 * @return 语言对象集合
	 */
	<R> List<R> selectLanguageBy2ForMappedObjectList(Class<R> mappedClass, LanguageDto selectLanguage);

	/**
	 * 分页:语言
	 * 
	 * @param mappedClass
	 *            返回类型
	 * 
	 * @param paginationLanguage
	 *            语言对象
	 * 
	 * @return 语言分页对象
	 */
	<R> PaginationDto<R> paginationLanguageBy1ForMappedObjectList(final Class<R> mappedClass,
			LanguageDto paginationLanguage);

	/**
	 * 分页
	 * 
	 * @param paginationLanguage
	 *            语言对象
	 * 
	 * @return 语言分页对象
	 */
	PaginationDto<Map<String, Object>> paginationLanguageBy1ForMapList(LanguageDto paginationLanguage);

	/**
	 * 插入:语言日志
	 * 
	 * @param insertLanguageLo
	 *            语言日志对象
	 * 
	 * @param insertProperties
	 *            插入属性名集合
	 * 
	 * @return 影响行数
	 */
	int insertLanguageLoBy1(LanguageLoDto insertLanguageLo, String... insertProperties);

	/**
	 * 删除:语言日志
	 * 
	 * @param deleteLanguageLo
	 *            语言日志对象
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 影响行数
	 */
	int deleteLanguageLoBy1(LanguageLoDto deleteLanguageLo, String... whereEqProperties);

	/**
	 * 更新:语言日志
	 * 
	 * @param updateLanguageLo
	 *            语言日志对象
	 * 
	 * @param updateProperties
	 *            更新的属性名集合
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 影响行数
	 */
	int updateLanguageLoBy1(LanguageLoDto updateLanguageLo, String[] updateProperties, String... whereEqProperties);

	/**
	 * 查询:语言日志
	 * 
	 * @param requiredType
	 *            返回类型
	 * 
	 * @param selectLanguageLo
	 *            语言日志对象
	 * 
	 * @param objectId
	 *            返回对象标识
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 返回对象
	 */
	<R> R selectLanguageLoBy1ForObject(Class<R> requiredType, LanguageLoDto selectLanguageLo, String objectId,
			String... whereEqProperties);

	/**
	 * 查询:语言日志
	 * 
	 * @param requiredType
	 *            返回类型
	 * 
	 * @param selectLanguageLo
	 *            语言日志对象
	 * 
	 * @param objectId
	 *            返回对象标识
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 语言日志对象集合
	 */
	<R> List<R> selectLanguageLoBy1ForObjectList(Class<R> requiredType, LanguageLoDto selectLanguageLo,
			String objectId, String... whereEqProperties);

	/**
	 * 查询:语言日志
	 * 
	 * @param mappedClass
	 *            返回类型
	 * 
	 * @param selectLanguageLo
	 *            语言日志对象
	 * 
	 * @param selectProperties
	 *            查询的属性名集合
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 返回对象
	 */
	<R> R selectLanguageLoBy1ForMappedObject(Class<R> mappedClass, LanguageLoDto selectLanguageLo,
			String[] selectProperties, String... whereEqProperties);

	/**
	 * 查询:语言日志
	 * 
	 * @param mappedClass
	 *            返回类型
	 * 
	 * @param selectLanguageLo
	 *            语言日志对象
	 * 
	 * @param selectProperties
	 *            查询的属性名集合
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 语言日志对象集合
	 */
	<R> List<R> selectLanguageLoBy1ForMappedObjectList(Class<R> mappedClass, LanguageLoDto selectLanguageLo,
			String[] selectProperties, String... whereEqProperties);
}